package com.tianji.promotion.utils;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UserCouponLock {

    /**
     * 锁名称
     * @return
     */
    String name();

    /**
     * 锁等待时间（等待时间反复重试获取锁，设为-1则表示不重试，直接结束）
     * @return
     */
    long waitTime() default 1;

    /**
     * 锁过期时间（锁超时释放时间。默认是30，同时会利用WatchDog来不断更新超时时间。需要注意的是，如果手动设置leaseTime值，会导致WatchDog失效。
     * -1则不删除）
     * @return
     */
    long leaseTime() default -1;

    /**
     * 时间单位
     * @return
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * 锁类型
     */
    LockType lockType() default LockType.RE_ENTRANT_LOCK;

    /**
     * 锁策略
     */
    MyLockStrategy lockStrategy() default MyLockStrategy.FAIL_FAST;
}
